/*
 * Copyright © 2020 www.noark.xyz All Rights Reserved.
 * 
 * 感谢您选择Noark框架，希望我们的努力能为您提供一个简单、易用、稳定的服务器端框架 ！
 * 除非符合Noark许可协议，否则不得使用该文件，您可以下载许可协议文件：
 * 
 * 		http://www.noark.xyz/LICENSE
 *
 * 1.未经许可，任何公司及个人不得以任何方式或理由对本框架进行修改、使用和传播;
 * 2.禁止在本项目或任何子项目的基础上发展任何派生版本、修改版本或第三方版本;
 * 3.无论你对源代码做出任何修改和改进，版权都归Noark研发团队所有，我们保留所有权利;
 * 4.凡侵犯Noark版权等知识产权的，必依法追究其法律责任，特此郑重法律声明！
 */
package com.company.qqsg.module.user.controller;

import static xyz.noark.log.LogHelper.logger;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.company.qqsg.core.JsonHelper;
import com.company.qqsg.module.user.proto.CreateRoleReq;
import com.company.qqsg.module.user.proto.GetRoleListReq;
import com.company.qqsg.module.user.proto.LoginReq;
import com.company.qqsg.module.user.proto.LoginRoleReq;
import com.company.qqsg.module.user.proto.ReconnectReq;
import com.company.qqsg.module.user.proto.UpdatePhoneInfoReq;
import com.company.qqsg.module.user.service.UserService;

import xyz.noark.core.annotation.Autowired;
import xyz.noark.core.annotation.Controller;
import xyz.noark.core.annotation.controller.CommandMapping;
import xyz.noark.core.annotation.controller.ExecThreadGroup;
import xyz.noark.core.network.NetworkProtocol;
import xyz.noark.core.network.Session.State;
import xyz.noark.network.SocketSession;

/**
 * 登录相关的协议入口。
 * <p>
 * 登录，获取角色列表，创角都由这个Controller串型执行.
 *
 * @author 小流氓(176543888@qq.com)
 */
@Controller(threadGroup = ExecThreadGroup.ModuleThreadGroup)
public class UserController {

	@Autowired
	private UserService userService;

	/**
	 * 登录请求.
	 * <p>
	 * 假装他直接登录成功了，这里没有去HTTP认证登录情况，客户端过来的sid就当他是用户唯一ID吧
	 */
	@CommandMapping(opcode = "ymn@login", state = State.CONNECTED)
	public String login(SocketSession session, LoginReq req) {
		return userService.login(session, req);
	}

	@CommandMapping(opcode = "getRoleList", state = State.AUTHENTICATED)
	public NetworkProtocol getRoleList(SocketSession session, GetRoleListReq req) {
		logger.debug("获取角色列表 req={}", req);
		Map<String, Object> result = new HashMap<>();
		result.put("state", 1);

		Map<String, Object> data = new HashMap<String, Object>();
		List<Object> playerList = new ArrayList<>();
		data.put("playerList", playerList);

		result.put("data", data);
		System.err.println(JSON.toJSONString(result));
		return new NetworkProtocol("getRoleList", JSON.toJSONString(result));
	}

	/**
	 * 创建角色，这里还未进入游戏所以是AUTHENTICATED状态
	 */
	@CommandMapping(opcode = "loginRole", state = State.AUTHENTICATED)
	public String loginRole(SocketSession session, LoginRoleReq req) {
		return userService.loginRole(session.getUid(), req);
	}

	/**
	 * 断线重连
	 */
	@CommandMapping(opcode = "reconnect")
	public String reconnect(SocketSession session, ReconnectReq req) {
		// /* 281 */ JsonDocument doc = new JsonDocument();
		// /* 282 */ doc.startObject();
		// /* 283 */ doc.createElement("sessionKey",
		// request.getSession().getId());
		// /* 284 */ doc.endObject();
		// /* 285 */ return getResult(JsonBuilder.getJson(State.SUCCESS,
		// doc.toByte()), request);
		return JsonHelper.buildSuccess();
	}

	@CommandMapping(opcode = "player@updatePhoneInfo", state = State.AUTHENTICATED)
	public String updatePhoneInfo(SocketSession session, UpdatePhoneInfoReq req) {
		return JsonHelper.buildSuccess();
	}
}